vimのWordPress投稿環境構成をPy2からPy3基準に更新した記録
はじめに
vimのパッケージ管理の流行りがNeoBundle
からPy3依存のライブラリの多いdein
に移る等、Python3前提になりつつあることを感じつつも、以下の2点で利用しているVim及びVimのプラグインはPython2が前提の状態でした。
- 業務都合でシステムのPythonバージョンを3へ上げづらい
- 使っているWordPress投稿プラグインがPy2前提
ですが、いつまでも騙し騙し使うわけにもいかないことと
- 業務で使うPythonバージョンを3へ移行する期日の目処がある程度たった
- 高速化されたvimプラグインを使いたい場合はPy3が前提になる
- neovimにするとPythonのパスが通しやすくなる
- WordPress投稿用プラグインでPy3対応のものがある
の4点で重い腰を上げることにしました。
更新前後の環境構成
完全に異なる構成になりました。一応前後の構成は共存可能です。
vim | プラグインマネージャ | Python(pyenv) | 投稿プラグイン | |
---|---|---|---|---|
更新前 | Kaoriya-vim | NeoBundle | system | VimRepress |
更新後 | neovim | dein | 3.7.2(neovim) | VimWordPress |
更新する順序
プラグイン設定等のvim自身で編集するものもあるため、念の為以下の順番で行います。
- neovimの導入
- neovim用のvirtualenv設定
- neovim用のvirtualenvにneovim導入
- init.vimにdein.vimの導入設定を追加
- init.vimにneovimのpy2とpy3を設定
- init.vimにvimrcの中身を移植
- zshrcのEDITORをneovimに変更
- tomlにプラグインの設定を追加
- WordPressへの投稿用プラグインの追加
neovimの導入
ソースコードからビルドする方法もありますが、手っ取り早くhomebrewを利用しました。
brew tap neovim/neovim brew install --HEAD neovim
neovim/neovim: Vim-fork focused on extensibility and usability
neovim用のvirtualenv設定
必ずしもvim用に用意する必要はありませんが、誤って削除することを防ぐためのラベル付けとしています。
brew install pyenv-virtualenv pyenv install 2.7.14 pyenv install 3.7.2 pyenv virtualenv 2.7.14 neovim2 pyenv virtualenv 3.7.2 neovim3
Setting up Python for Neovim · deoplete-plugins/deoplete-jedi Wiki
neovim用のvirtualenvにneovim導入
一見何を言ってるのかわからなくなりますが、Pythonでneovimに接続するためのライブラリを導入します。現在は正確にはpynvim
というライブラリ名になっています。
$PYENV_ROOT/versions/neovim2/bin/pip install pynvim $PYENV_ROOT/versions/neovim3/bin/pip3 install pynvim
neovim/pynvim: python client and plugin host for Nvim
init.vimにdein.vimの導入設定を追加
dein.vimの設定を追加します。
参考 NeoBundleからdein.vimへの移行 - Qiita
"#####dein設定##### " プラグインがインストールされるディレクトリ let s:dein_dir = expand('~/.cache/dein') " dein.vim 本体がインストールされるディレクトリ let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim' " dein.vim がなければ github から落としてくる if &runtimepath !~# '/dein.vim' if !isdirectory(s:dein_repo_dir) execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir endif execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p') endif " 設定開始 if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) " プラグインリストを収めた TOML ファイル " 予め TOML ファイル(後述)を用意しておく let g:rc_dir = expand('~/.vim/rc') let s:toml = g:rc_dir . '/dein.toml' let s:lazy_toml = g:rc_dir . '/dein_lazy.toml' " TOML を読み込み、キャッシュしておく call dein#load_toml(s:toml, {'lazy': 0}) call dein#load_toml(s:lazy_toml, {'lazy': 1}) " 設定終了 call dein#end() call dein#save_state() endif " もし、未インストールものものがあったらインストール if dein#check_install() call dein#install() endif
init.vimにneovimのpy2とpy3を設定
~/.config/nvim/init.vim
にpyとpy3のパスを追加します。
echo 'let g:python3_host_prog = $PYENV_ROOT . \'/versions/neovim3/bin/python3\'' >> ~/.config/nvim/init.vim echo 'let g:python_host_prog = $PYENV_ROOT . \'/versions/neovim/bin/python2\'' >> ~/.config/nvim/init.vim
init.vimにvimrcの中身を移植
encoding
やfenc
等、set系の行を移植します。
zshrcのEDITORをneovimに変更
変更することでneovimによる編集へ移行します。
% vim ~/.zshrc set EDITOR=/usr/local/Cellar/neovim/HEAD-<hash>/bin/nvim alias vi='env LANG=ja_JP.UTF-8 /usr/local/Cellar/neovim/HEAD-<hash>/bin/nvim "$@"' alias vim='env LANG=ja_JP.UTF-8 /usr/local/Cellar/neovim/HEAD-<hash>/bin/nvim "$@"' % source ~/.zshrc
tomlにプラグインの設定を追加
NeoBundleにて設定していたプラグインをdeinで入れ直します。
% vim ~/.vim/rc/dein.toml [[plugins]] repo = 'XXX/xxx'
vimrcに追記する場合の書き方は大まかには以下の様になります。
manager | install |
---|---|
NeoBundle |
call neobundle#begin(expand('~/.vim/bundle/')) NeoBundle 'XXX/xxx' call neobundle#end() |
dein |
if dein#load\_state('$HOME/.cache/dein') call dein#begin('$HOME/.cache/dein') call dein#add('XXX/xxx') call dein#end() call dein#save_state() endif |
WordPressへの投稿用プラグインの追加
Python2の場合はVimRepressがありましたが、Python3の場合はVimWordPressが存在します。主な操作は共通です。
MrPeterLee/VimWordpress: A Vim Plugin for Blogging in WordPress (incl. wordpress.com)
ただ、Deprecatedなクラスを使っている部分があるため正常には動作しないようです。そこで、Forkしてその部分を解消してみました。
haoyayoi/VimWordpress: A Vim Plugin for Blogging in WordPress (incl. wordpress.com)
% vim ~/.vim/rc/dein.toml [[plugins]] repo = 'cm-haoyayoi/VimWordPress'
vimrcをvimとneovimで共用する場合
init.vimをvimrcのシンボリックリンクとすることで、設定の手間を省くことも出来ます。nvimかどうかの判定が必要になるケースもありますが、以下の手続きで可能になります。
if has('nvim') else endif
まとめ
init.vimをvimrcのシンボリックリンクとすることも可能でしたが、修正行が多かったために今回は行いませんでした。
neovimには、tomlでの簡潔なプラグイン管理、pythonの呼び出しパス設定等、業務面においてもとても便利な機能が備わっています。WordPress用プラグインの対応等でvimでのPython3移行が面倒となっていた人にはおすすめです。